﻿// 401 线性筛.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>


using namespace std;
/*
http://oj.daimayuan.top/course/21/problem/517

给一个数字n，求1∼n中的所有素数p。

为了防止输出过大和防止打表，给定a,b
，输出这些素数(a⋅p+b)mod232的异或和。

输入格式
第一行三个整数n,a,b。

输出格式
一个整数，表示答案。

样例输入
100 1 0
样例输出
64
数据规模
对于所有数据，保证1≤n≤5×107,0≤a,b<232。
*/


const int N = 5e7 +10;
long long primes[N], cnt;
bool st[N];
long long MOD = 4294967296;
long long a, b;
void get_primes(long long n)
{
    for (int i = 2; i <= n; i++)
    {
        if (st[i]) continue;
        primes[cnt++] = i;
        for (int j = i + i; j <= n; j += i)
            st[j] = true;
    }
}

long long calc(long long  x) {
    long long ret = 0;
    ret = (x*a%MOD + b) % MOD;
    return ret;
}


int main()
{
    int n;
    cin >> n >> a >> b;
    get_primes(n);
    long long res = 0;
 
    for (int i = 0; i < cnt; i++) {
        res ^= calc(primes[i]);
        res %= MOD;
    }
    cout << res << endl;
	return 0;
}

 